home *** CD-ROM | disk | FTP | other *** search
/ The Very Best of Atari Inside / The Very Best of Atari Inside 1.iso / mint / mntlib43 / mntlib / wcmb.c < prev    next >
C/C++ Source or Header  |  1993-11-02  |  1KB  |  81 lines

  1. /* This implements the wc* and mb* ANSI/ISO functions.
  2.    They're in the "DUMB" locale ;), and in the public domain.
  3. */
  4.  
  5. #include <stdlib.h>
  6. #include <stddef.h>
  7.  
  8. extern const wchar_t *_wnull;
  9.  
  10. int
  11. mblen(mbstr, n)
  12. const char *mbstr;
  13. size_t n;
  14. {
  15.     /* Locale test: no shift states. */
  16.     if(mbstr == NULL) return 0;
  17.     
  18.     if(*mbstr == '\0' || n == 0) return 0;
  19.     
  20.     /* There are no multibytesequences... */
  21.     return 1;
  22. }
  23.  
  24. size_t
  25. mbstowcs(wstr, mbstr, maxlen)
  26. wchar_t *wstr;
  27. const char *mbstr;
  28. size_t maxlen;
  29. {
  30.     size_t revcnt = maxlen;
  31.     
  32.     if(mbstr == NULL) mbstr = "";
  33.     
  34.     while(revcnt && ((*wstr++ = *mbstr++) != 0)) revcnt--;
  35.     
  36.     return maxlen - revcnt;
  37. }
  38.  
  39. int
  40. mbtowc(wstr, mbstr, n)
  41. wchar_t *wstr;
  42. const char *mbstr;
  43. size_t n;
  44. {
  45.     /* Locale test: no shift states. */
  46.     if(mbstr == NULL) return 0;
  47.     
  48.     if(*mbstr == '\0' || n == 0) return 0;
  49.     
  50.     if(wstr != NULL) *wstr = *mbstr;
  51.     return 1;
  52. }
  53.  
  54.  
  55. size_t
  56. wcstombs(mbstr, wstr, maxlen)
  57. char *mbstr;
  58. const wchar_t *wstr;
  59. size_t maxlen;
  60. {
  61.     size_t revcnt = maxlen;
  62.     
  63.     if(wstr == NULL) wstr = _wnull; /* Better avoid L"". */
  64.     
  65.     while(revcnt && ((*mbstr++ = (char) *wstr++) != 0)) revcnt--;
  66.     
  67.     return maxlen - revcnt;
  68. }
  69.  
  70. int
  71. wctomb(mbstr, wchar)
  72. char *mbstr;
  73. wchar_t wchar;
  74. {
  75.     /* Nope, still no statedependencies. */
  76.     if(mbstr == NULL) return 0;
  77.     
  78.     *mbstr = (char) wchar;
  79.     return 1;
  80. }
  81.